package serializer;

/*
 * 序列化/ 反序列化 接口
 * */
public interface Serializer {

    Integer KRYO_SERIALIZER = 0;
    Integer JSON_SERIALIZER = 1;
    Integer HESSION_SERIALIZER = 2;
    Integer PROTOBUF_SERIALIZER = 3;

    byte[] serialize(Object object);

    //反序列化 指定类型 可能是请求类型，也有可能是响应类型。
    Object deserialize(byte[] bytes, Class<?> clazz);

    int getCode();

    //根据传递参数的不同 选择不同的序列化方式
    static Serializer getBycode(int code) {
        switch (code) {
            case 0:
                return new KryoSerializer();
            case 1:
                return new JsonSerializer();
            case 2:
                return new HessianSerializer();
            case 3:
                return new ProtobufSerializer();
            default:
                return null;
        }
    }


}
/*
 * 需求：
 * 不同的序列化格式 选择
 * 如何设计能够根据参数传递 获取对应的序列化格式
 * 参数：枚举类 设计，直接显示 参数类型。
 * 接口中不能有实现类
 *
 * 参考：序列化中 不同类型对应不同参数
 * 不同类型 对应 一个整数。
 *   实现：在接口中使用一个静态方法 实现 参数传递，
 *       使用枚举类 表示 传递的具体类型。
 *
 * */


